

public class LinkList {
    //首先声明头指针，因为只是声明，没有分配空间。
    Node head = null;
    int length = 0;

    /**
     * 1、声明内部结点类
     * 链表结点Node: value代表数值 next代表下一个结点，next就是一个结点本身了，不是指针
     */
    class Node {
        int value;
        Node next = null;

        //初始化链表结点
        public Node(int value) {
            this.value = value;
        }

    }

    /**
     * 2、向链表中插入数据
     */
    public void addNode(int value) {
        //先实例化一个结点
        Node newNode = new Node(value);
        //如果此时还没有结点，即链表为空，则初始化为第一个结点
        if (head == null) {
            head = newNode;
        }
        //如果非空，就循环找到最后一个结点
        Node tmp = head;
        while (tmp.next != null) {
            tmp = tmp.next;
        }
        tmp.next = newNode;
    }

    /**
     * 3、删除第index个结点
     */
    public boolean deleteNode(int index) {
        if(index<0 || index>length-1){
            return false;
        }
        if( index == 0) {
            head = head.next;
            return true;
        }
        //剩下的情况，删除结点不需要改变头指针的指向
        int i = 1;
        Node preNode = head;
        Node curNode = preNode.next;
        while(i!=index){
            preNode = preNode.next;
            curNode = curNode.next;
            i++;
        }
        preNode.next = curNode.next;
        curNode = curNode.next;//只要没有指针指向原本的结点，它就会被回收
        return true;

    }


}
